package leetcode_day._2021._202110;

/**
 * @author yzh
 * @version 1.0
 * @date 2021/10/14 20:19
 * 山峰数组的顶部
 * 符合下列属性的数组 arr 称为 山峰数组（山脉数组） ：
 * arr.length >= 3
 * 存在 i（0 < i < arr.length - 1）使得：
 * arr[0] < arr[1] < ... arr[i-1] < arr[i]
 * arr[i] > arr[i+1] > ... > arr[arr.length - 1]
 * 给定由整数组成的山峰数组 arr ，返回任何满足 arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
 * 的下标 i ，即山峰顶部。
 * 算法：二分查找
 */
public class _14_剑指OfferII069 {

    public int peakIndexInMountainArray(int[] arr) {
        int l = 0, r = arr.length - 2;
        while (l <= r) {
            int mid = l + r + 1 >> 1;
            if (arr[mid] > arr[mid - 1] && arr[mid] > arr[mid + 1]) return mid;
            if (arr[mid] >= arr[mid - 1] && arr[mid] < arr[mid + 1]) l = mid + 1;
            else r = mid - 1;
        }
        return l;
    }

}
